//package org.ccg
//
//
//import com.google.gson.GsonBuilder
//import io.ktor.server.application.*
//import io.ktor.server.engine.*
//import io.ktor.server.http.content.*
//import io.ktor.server.netty.*
//import io.ktor.server.response.*
//import io.ktor.server.routing.*
//import io.ktor.server.websocket.*
//import io.ktor.websocket.*
//import kotlinx.coroutines.channels.ClosedReceiveChannelException
//import java.time.LocalDateTime
//import java.time.format.DateTimeFormatter
//import java.util.*
//import kotlin.time.Duration.Companion.seconds
//
//object ChatRoom {
//    val members = Collections.synchronizedMap(mutableMapOf<String, WebSocketSession>())
//
//    suspend fun join(token: String, session: WebSocketSession) {
//        members[token] = session
//        println("连接数:    " + members.size)
//        broadcast("{\"type\":\"0\",\"sender\":\"${token}\"}")
//    }
//
//    suspend fun leave(token: String) {
//        members.remove(token)
//        broadcast("{\"type\":\"1\",\"sender\":\"${token}\"}")
//    }
//
//    suspend fun sendMessage(senderId: String, message: String) {
//        members[senderId]?.send(message)
//    }
//
//    suspend fun disconnectAll() {
//        members.values.forEach { session ->
//            try {
//                session.close(CloseReason(CloseReason.Codes.NORMAL, "Server initiated disconnect"))
//            } catch (e: Exception) {
//                // 忽略关闭过程中可能出现的异常
//            }
//        }
//        members.clear()
//    }
//
//    private suspend fun broadcast(message: String) {
//        members.values.forEach { session ->
//            try {
//                session.send(message)
//            } catch (e: Exception) {
//                // 处理发送失败的情况
//            }
//        }
//    }
//}
//
//fun Application.moduleTwo() {
//    install(WebSockets) {
//        pingPeriod = 15.seconds
//        timeout = 15.seconds
//        maxFrameSize = Long.MAX_VALUE
//    }
//
//    routing {
//        staticResources("/text", "static/text")
//        get("/") {
//            val current = LocalDateTime.now()
//            call.respondText("WebRtc  提示时间:     " + current.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
//        }
//        webSocket("/chat") {
//            val room = ChatRoom
//            call.request.queryParameters["token"]?.let {
//                room.join(it, this)
//            }
//            try {
//                for (frame in incoming) {
//                    when (frame) {
//                        is Frame.Text -> {
//                            val jsonMessage = frame.readText()
//                            if (jsonMessage == "DisconnectAllConnections") {
//                                //断开所有连接
//                                room.disconnectAll()
//                                return@webSocket  // 提前结束当前协程
//                            }
//                            val message = GsonBuilder().create().fromJson(jsonMessage, SignalingMessage::class.java)
//                            when (message.type) {
//                                "OFFER", "ANSWER", "CANDIDATE" -> {
//                                    // 转发给指定的接收者
//                                    room.sendMessage(message.receiver, jsonMessage)
//                                }
//
//                                "offer", "answer", "candidate" -> {
//                                    // flutter 端
//                                    room.sendMessage(message.receiver, jsonMessage)
//                                }
//                            }
//                        }
//
//                        else -> {
//
//                        }
//                    }
//                }
//            } catch (e: ClosedReceiveChannelException) {
//                println("连接被异常关闭: ${e.message}")
//            } catch (e: Throwable) {
//                println("发生其他错误: ${e.message}")
//            } finally {
//                //安卓退出应用会执行
//                println("连接已终止，执行清理操作...: ${closeReason.await()?.message}")
//                val statusCode = closeReason.await()?.code
//                val token = closeReason.await()?.message
//                println("断开连接: ${token}")
//                if (statusCode != null && token != null && statusCode == 1000.toShort()) {
//                    //如果是正常关闭,删除已保存的用户
//                    println("如果是正常关闭,删除已保存的用户")
//                    room.leave(token)
//                } else {
//                    println("如果是异常关闭,不删除已保存的用户")
//                    println(statusCode)
//                    println(token)
//                }
//                println("共多少人在线:" + room.members.size)
//            }
//        }
//    }
//}
//
//fun main() {
//    embeddedServer(Netty, port = 7424, module = Application::moduleTwo).start(wait = true)
//}